Amazon Cognito를 AWS CloudFormation 코드로 작성하여 로그인 및 회원 가입 로직 구현
안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 Amazon Cognito를 AWS CloudFormation 코드로 작성하여 로그인 및 회원 가입 로직을 구현해 봤습니다.
Amazon Cognito의 사용자 풀, 자격 증명 풀 설정은 아래 블로그와 동일합니다.
Amazon Cognito의 AWS CloudFormation 코드 및 HTML, JavaScript 코드를 포함한 전체 코드는 아래 깃 허브를 확인해 주세요.
AWS CloudFormation 코드
사용자 풀과 자격 증명 풀은 cognito.yml이라는 파일에서 생성하고 있습니다.
먼저 사용자 풀 코드는 다음과 같습니다.
UserPool: Type: AWS::Cognito::UserPool Properties: UserPoolName: !Sub ${SystemName}-${EnvName}-UserPool AdminCreateUserConfig: AllowAdminCreateUserOnly: false # 관리자 이외에도 프로필을 생성 가능하도록 허용 UnusedAccountValidityDays: 7 # 관리자가 설정한 임시 암호의 만료까지 남은 시간 UsernameAttributes: # 사용자가 회원 가입할 때 이메일을 지정 - email Policies: # 암호 정책 설정 PasswordPolicy: MinimumLength: 8 RequireLowercase: true RequireNumbers: true RequireSymbols: false RequireUppercase: true MfaConfiguration: 'OFF' # MFA 설정은 무효화 AccountRecoverySetting: # 계적 복구에는 이메일을 사용 RecoveryMechanisms: - Name: verified_email Priority: 1 AutoVerifiedAttributes: # 로그인, 계쩡 복구 등에 사용할 인증 방법을 선택 - email UserAttributeUpdateSettings: # 업데이트가 보류 중일 때 원래 속성 값을 활성 상태로 유지 AttributesRequireVerificationBeforeUpdate: - email Schema: # 새 사용자가 생성될 때 필요한 속성을 확인 - Name: email AttributeDataType: String Required: true Mutable: true EmailConfiguration: # 인증시 사용자에게 보낼 이메일 주소를 선택 EmailSendingAccount: COGNITO_DEFAULT ReplyToEmailAddress: [email protected] UserPoolClient: Type: AWS::Cognito::UserPoolClient Properties: ClientName: !Sub ${SystemName}-${EnvName}-ClientPool UserPoolId: !Ref UserPool GenerateSecret: false ExplicitAuthFlows: - ALLOW_USER_SRP_AUTH - ALLOW_REFRESH_TOKEN_AUTH SupportedIdentityProviders: - COGNITO
먼저 사용자 풀을 생성하는 코드입니다.
대략적인 설정은 다음과 같습니다.
- 공급자 유형에는 Cognito 사용자 풀을 선택했으며, 로그인할 때 이메일을 사용하여 로그인하도록 설정했습니다.
- 암호 정책은 Cognito 기본 값으로 진행했으며, 임시 암호의 만료 시간도 기본 값인 7일로 설정했습니다.
- MFA 설정은 없는 상태로 설정했습니다.
- 계정 복구를 위해 계정 복구 활성화를 했으며, 이메일을 통해 복구하도록 설정했습니다.
- Cognito 지원 확인과 속성 변경 확인은 기본 값으로 진행했습니다.
- 필수 속성은 이메일만을 설정했습니다.
- 인증 코드를 받기 위한 이메일은 Cognito를 사용하여 전송하도록 하였으며, no-reply 이메일을 이용했습니다.
- 앱 유형은 퍼블릭 클라이언트로 지정했습니다.
이어서 자격 증명 풀 코드입니다.
IdentityPool: Type: AWS::Cognito::IdentityPool Properties: IdentityPoolName: !Sub ${SystemName}-${EnvName}-IdentityPool AllowUnauthenticatedIdentities: false CognitoIdentityProviders: - ClientId: !Ref UserPoolClient ProviderName: !GetAtt UserPool.ProviderName
자격 증명 풀에서는 자격 증명 풀의 이름을 지정하고, 사용자 풀의 ID와 이름을 지정합니다.
IdentityPoolRoleAttachment: Type: AWS::Cognito::IdentityPoolRoleAttachment Properties: IdentityPoolId: !Ref IdentityPool Roles: authenticated: !GetAtt IdentityPoolRole.Arn
이어서 자격 증명 풀에서 IAM Role을 설정합니다.
여기서 IAM Role은 자격 증명 풀에서 자동으로 생성되는 ap-northeast-2_xxxxxxx_Full-access 정책을 바탕으로 새로 IAM Role을 생성했으며, 이 IAM Role을 자격 증명 풀과 연결하는 코드입니다.
HTML과 JavaScript에 대한 설명은 생략합니다.
결과 확인
회원 가입 폼에서 이메일과 비밀번호를 입력합니다.
이후 입력한 이메일 주소로 인증 코드를 확인합니다.
인증 화면에서 이메일 주소와 인증 코드를 입력합니다.
인증이 끝났다면, 로그인 페이지로 넘어가게 되며. 로그인을 시도합니다.
로그인에 성공했다면 화면에 로그인한 이메일 주소가 출력됩니다.
사용자 풀에서도 가입한 사용자의 정보를 확인할 수 있습니다.
본 블로그 게시글을 읽고 궁금한 사항이 있으신 분들은 [email protected]로 보내주시면 감사하겠습니다.